The present invention relates to the field of digital computer systems, and more specifically, to a method for providing access to a data block in an input/output (I/O) device.
Conventional computer systems allow mapping a peripheral component interconnect (PCI) address space into central processing unit (CPU) physical address space based on physical addresses obtained using virtual memory address-to-physical address translations that are typically stored in page table entries of a page table. Each page table entry has a page table entry address. The translations are provided by an operating system. It is the responsibility of the operating system to map the virtual address provided by a given process to the physical address of the actual device memory where that data is stored. Furthermore, a memory controller may receive the physical address. And the memory controller may use a mapping of the device address space into CPU physical address space to forward the received request to a device whose memory range contains the requested address.
However, not all CPU architectures allow to map the device address space into CPU physical address space. Thus, there is a need to provide alternatives while maintaining applications which rely on mapped PCI addresses.